// 基础配置
const BASE_URL = 'https://liu.zzgoodqc.cn/api'; // 基础域名
const TIME_OUT = 10000; // 超时时间

/**
 * 网络请求封装
 * @param {string} url - 接口路径（相对于BASE_URL）
 * @param {string} method - 请求方法（GET/POST/PUT/DELETE）
 * @param {object} data - 请求参数
 * @param {object} header - 自定义请求头
 * @returns {Promise} - 返回Promise对象
 */
const request = (url, method = 'GET', data = {}, header = {}) => {
  // 显示加载中提示
  wx.showLoading({ title: '加载中...', mask: true });

  return new Promise((resolve, reject) => {
    wx.request({
      url: BASE_URL + url, // 完整接口地址
      method,
      data,
      header: {
        'Content-Type': 'application/json', // 默认JSON格式
        ...header // 合并自定义请求头
      },
      timeout: TIME_OUT,
      success: (res) => {
        // 隐藏加载提示
        wx.hideLoading();

        // 打印请求日志
        console.log(`[请求成功] ${method} ${BASE_URL + url}`, {
          params: data,
          result: res.data
        });

        // 接口业务逻辑判断（根据实际接口调整）
        if (res.statusCode === 200) {
          // 假设接口返回格式：{ code: 200, data: ..., msg: '' }
          if (res.data.code === 200) {
            resolve(res.data.data); // 只返回业务数据
          } else {
            // 业务错误（如参数错误）
            wx.showToast({
              title: res.data.msg || '操作失败',
              icon: 'none'
            });
            reject(new Error(res.data.msg || '业务错误'));
          }
        } else {
          // HTTP状态码错误
          wx.showToast({
            title: `请求失败[${res.statusCode}]`,
            icon: 'none'
          });
          reject(new Error(`HTTP错误: ${res.statusCode}`));
        }
      },
      fail: (err) => {
        // 隐藏加载提示
        wx.hideLoading();

        // 打印错误日志
        console.error(`[请求失败] ${method} ${BASE_URL + url}`, {
          params: data,
          error: err
        });

        // 网络错误提示
        wx.showToast({
          title: '网络异常，请稍后再试',
          icon: 'none'
        });
        reject(err);
      }
    });
  });
};

// 简化常用请求方法
const http = {
  get: (url, data, header) => request(url, 'GET', data, header),
  post: (url, data, header) => request(url, 'POST', data, header),
  put: (url, data, header) => request(url, 'PUT', data, header),
  delete: (url, data, header) => request(url, 'DELETE', data, header)
};

module.exports = http;